package ktvdownloadserver

/****************************************************************/
// 网络协议

const REQUEST_SYSTEM_FILEINFO = 0x2001

/*
  命令 :       REQUEST_SYSTEM_FILEINFO
  命令内容:    结构体 RequestFileInfo的对象, 在szFilename处填入文件名
  用途:        获取某个系统文件的信息，目前只是发送文件大小

  返回码:      0x3000
  返回内容:    文件的大小
  内容长度:    4 BYTES

*/

const REQUEST_SYSTEM_FILEDATA = 0x2002

/*
  命令 :       REQUEST_SYSTEM_FILEDATA
  命令内容:    结构体 RequestFileInfo的对象, 在szFilename处填入文件名
  用途:        请求传输系统文件, 带同步信息

  返回码:      0x3001
  返回内容:    系统文件的数据
  内容长度:    文件的长度

*/

const REQUEST_SYSTEM_CONTINUE = 0x2003

/*
  命令 :       REQUEST_SYSTEM_CONTINUE
  命令内容:    结构体 RequestFileInfo的对象, 在szFilename处填入文件名
  用途:        请求续传系统文件, 不带同步信息

  返回码:      (空)
  返回内容:    直接发送文件数据，不发送同步信息
  内容长度:    文件的长度

*/

const REQUEST_SONG_FILEINFO = 0x2004

/*
  命令 :       REQUEST_SONG_FILEINFO
  命令内容:    结构体 RequestFileInfo的对象, 在dwNumber处填入歌曲编号
              在szFilename第一个字符处填入磁盘分区字符，比如E

  用途:        请求获取歌曲文件信息

  返回码:      0x3003
  返回内容:    文件的大小
  内容长度:    4 BYTES

*/

const REQUEST_SONG_FILEDATA = 0x2005

/*
  命令 :       REQUEST_SONG_FILEDATA
  命令内容:    结构体 RequestFileInfo的对象, 在dwNumber处填入歌曲编号
              在szFilename第一个字符处填入磁盘分区字符，比如E

  用途:        请求传输歌曲文件数据，带同步信息

  返回码:      0x3004
  返回内容:    文件的内容
  内容长度:    4 BYTES

*/

const REQUEST_SONG_CONTINUE = 0x2006

/*
  命令 :       REQUEST_SONG_CONTINUE
  命令内容:    结构体 RequestFileInfo的对象, 在dwNumber处填入歌曲编号
              在szFilename第一个字符处填入磁盘分区字符，比如E

  用途:        请求传输歌曲文件数据，不带同步信息

  返回码:      (空)
  返回内容:    直接发送文件数据，不发送同步信息
  内容长度:    文件的长度

*/

const REQUEST_MOVIE_FILEINFO = 0x2007

/*
  命令 :       REQUEST_MOVIE_FILEINFO
  命令内容:    结构体 RequestFileInfo的对象, 在dwNumber处填入电影编号

  用途:        请求获取电影文件信息

  返回码:      0x3007
  返回内容:    文件的大小
  内容长度:    4 BYTES

*/

const REQUEST_MOVIE_FILEDATA = 0x2008

/*
  命令 :       REQUEST_MOVIE_FILEDATA
  命令内容:    结构体 RequestFileInfo的对象, 在dwNumber处填入电影编号


  用途:        请求传输电影文件数据，带同步信息

  返回码:      0x3008
  返回内容:    文件的内容
  内容长度:    文件的长度

*/

const REQUEST_MOVIE_CONTINUE = 0x2009

/*
  命令 :       REQUEST_MOVIE_CONTINUE
  命令内容:    结构体 RequestFileInfo的对象, 在dwNumber处填入电影编号

  用途:        请求传输电影文件数据，不带同步信息

  返回码:      (空)
  返回内容:    直接发送文件数据，不发送同步信息
  内容长度:    文件的长度

*/

const REQUEST_STOP_CODE = 0x2010

/*
  命令:     REQUEST_STOP_CODE

  用途:     要求服务器停止发送当前数据

  返回码:      (空)

  返回内容:    直接发送停止码，不发送同步信息
  内容长度:    停止码的长度 32 BYTES

  客户端循环接收数据， 在收到32 BYTES的停止码数据后，服务器不会再发送数据过来。


  中文:  深圳市视友时代科技有限公司欢迎你
  BYTE szStopCode[33] = {   241, 109,  51,  87,   2, 94,  198, 137,
                              203,  83, 246, 101, 227, 78,  209, 121,
                              128,  98,   9, 103,  80, 150, 108,  81,
                              248,  83,  34, 107, 206, 143, 168,  96 };

*/

const REQUEST_SAVE_FILE_TO_DISK = 0x2011

/*
   命令:  REQUEST_SAVE_FILE_TO_DISK

   用途： 把文件数据保存到服务器磁盘上面

   命令内容:    SaveFileInfo的对象 + 文件数据

                 struct SaveFileInfo
                 {
                    WCHAR  szFilePath[100]; // 文件的路径, 200 BYTES
                                            // 例如，保存文件到E:\KTV\SYSTEM\aaa.dat, 这里填入SYSTEM\aaa.dat
                    DWORD  dwFileSize; // 文件的大小, 大小为0时删除旧数据
                    BYTE   disk; // 磁盘分区， 0表示服务器软件当前分区， 保存系统文件时填0
                    BYTE   reserved[3]; // 保留
                 };

   返回码 : 0x3011
   返回内容 : DWORD dwResult;  // 保存结果 4 BYTES   0:成功，  1:失败

*/

const REQUEST_SAVE_MEM_DATA = 0x2012

/*
   命令: REQUEST_SAVE_MEM_DATA

   用途: 保存数据到服务器内存里面

   命令内容:  SaveMemDataInfo对象 + 数据
              struct SaveMemDataInfo
              {
                  DWORD dwPrimaryID; // 数据识别主ID
                  DWORD dwSubID;     // 数据识别辅ID
                  DWORD dwDataSize;  // 数据大小, 大小为0相当于删除数据
              };

    返回码 : 0x3012
    返回内容 : DWORD dwResult;  // 保存结果 4 BYTES   0:成功，  1:失败

*/

const REQUEST_GET_MEM_DATA = 0x2013

/*
   命令: REQUEST_GET_MEM_DATA

   用途: 保存数据到服务器内存里面

   命令内容:  GetMemDataInfo对象
              struct GetMemDataInfo
              {
                  DWORD dwPrimaryID; // 数据识别主ID
                  DWORD dwSubID;     // 数据识别辅ID
                  DWORD dwStart;     // 开始地址
                  DWORD dwDataSize;  // 数据大小, 大小为0时获取整份数据
              };

    返回码 : 0x3013
    返回内容 :  RspMemDataInfo对象 + 数据
                struct RspMemDataInfo
                {
                    DWORD dwTotolSize; // 整份数据大小
                    DWORD dwRspSize;   // 当前返回数据大小
                };

*/

const REQUEST_CHECK_DATA_UPDATE = 0x2014

/*
   命令: REQUEST_CHECK_DATA_UPDATE

   用途: 检查歌库是否已经有了更新

   命令内容:    结构体 RequestFileInfo的对象

   返回码 : 0x3014
   返回内容 :  4个字节的结果   1为更新， 0没有更新

*/

const REQUEST_SONG_IP_LIST = 0x2015

/*
    命令: REQUEST_SONG_IP_LIST

    用途: 获取歌曲的所在服务器

    命令内容:    结构体 RequestFileInfo的对象, dwNumber填入歌曲编号

    返回码 : 0x3015
    返回内容 :
    struct SongIpList
    {
      DWORD dwSongNum;  // 歌曲编号
      DWORD dwCount;    // 当前服务器的个数
      DWORD ipList[5];  // IP地址列表， 同一首歌最多放在5个服务器上面
    };

  备注: 该协议只在ktv center服务器上面实现

*/

const REQUEST_LASTEST_INFO = 0x2016

/*
   命令: REQUEST_LASTEST_INFO

   用途: 获取最新的信息,   当前时间

   命令内容:    结构体 RequestFileInfo的对象

   返回码 : 0x3016
   返回内容 :    SYSTEMTIME对象 + 1970到当前的秒数
   typedef struct _SYSTEMTIME {
                       WORD wYear;
                       WORD wMonth;
                       WORD wDayOfWeek;
                       WORD wDay;
                       WORD wHour;
                       WORD wMinute;
                       WORD wSecond;
                       WORD wMilliseconds;
               } SYSTEMTIME, *LPSYSTEMTIME;


*/

const REQUEST_CHECK_ERROR_CODE = 0x2017

/*
   命令: REQUEST_CHECK_ERROR_CODE

   用途: 获取最新的信息,   当前时间

   命令内容:    结构体 RequestFileInfo的对象, dwNumber填写歌曲编号

   返回码 : 0x3016
   返回内容 :  错误代码,  4 BYTES

*/

/****************************************************************/
// KTV公共外部服务器协议

const REQUEST_PUBLIC_SONG_FILELIST = 0x2050

/*
命令: REQUEST_PUBLIC_SONG_FILELIST

用途: 歌曲文件夹下的文件列表

命令内容:    结构体 RequestFileInfo的对象 + 会话令牌 , dwNumber填写歌曲编号

返回码 : 0x3016
返回内容 :
*/

const REQUEST_PUBLIC_SONG_DATA = 0x2051

/*
命令: REQUEST_PUBLIC_SONG_FILELIST

用途: 歌曲文件夹下的文件数据

命令内容:    结构体 RequestFileInfo的对象 + 会话令牌, dwNumber填写歌曲编号, szFileName填写文件名

返回码 : 0x3016
返回内容 :
*/

const REQUEST_PUBLIC_SONG_IP = 0x5022

/*
命令:  REQUEST_PUBLIC_SEARCH
命令内容:    结构体 RequestFileInfo的对象
用途:        搜索歌曲

返回码:
返回内容:
内容长度:

*/

const REQUEST_PUBLIC_SONGDATA_BEYOND_NUMBER = 0x5023

/*
命令:  REQUEST_PUBLIC_SONGDATA_BEYOND_NUMBER
命令内容:    结构体RequestFileInfo的对象,  在dwNumber处填入歌曲编号
用途:       返回超过指定歌曲编号的歌曲数据

返回码:
返回内容:
内容长度:

*/

const REQUEST_DOWNLOAD_SONG_IP_LIST = 0x5024

/*
命令: REQUEST_DOWNLOAD_SONG_IP_LIST

用途: 获取歌曲的所在服务器

命令内容:    结构体 DownloadSongIpList的对象

返回码 : 0x5024
返回内容 :
#define  KTV_MAX_DOWNLOAD_SONG_IP_COUNT  (40)
struct  DownloadSongIpList
{
int   cbStructSize; // 结构体大小 = sizeof(DownloadSongIpList)
DWORD dwSongNum;  // 歌曲编号
DWORD dwCount;    // 当前服务器的个数
DWORD ipList[KTV_MAX_DOWNLOAD_SONG_IP_COUNT];  //  IP地址列表
WORD  port[KTV_MAX_DOWNLOAD_SONG_IP_COUNT]; // 端口号
BYTE  disk[KTV_MAX_DOWNLOAD_SONG_IP_COUNT];    // 每个服务器上面对应的盘符
};
注释：此版本的端口号发生改变，ktvcenter的端口号根据盘符来定，C盘9301，D盘9302
  依次类推;KtvWebServer(歌曲下载服务器)的端口号类似，C盘9401，D盘9402,依次类推
*/

const REQUEST_PUBLIC_NEW_SONGDATA_BEYOND_NUMBER = 0x5025

/*
命令:  REQUEST_PUBLIC_SONGDATA_BEYOND_NUMBER
命令内容:    结构体RequestFileInfo的对象,  在dwNumber处填入歌曲编号
用途:       返回超过指定歌曲编号的歌曲数据

返回码:
返回内容:
内容长度:

*/

/****************************************************************/
// Ktv Center 中心服务器专用协议

const REQUEST_SYSTEM_BUFFER = 0x2201

/*
     命令: REQUEST_SYSTEM_BUFFER
   命令内容:    结构体 RequestFileInfo的对象, 在szFilename处填入文件名
   用途:        请求传输系统文件, 带同步信息

   返回码:      0x3201
   返回内容:    SystemBufferInfo对象 + 文件数据
   内容长度:

               struct SystemBufferInfo{
                   TCHAR szFilename[40]; /// 80 BYTES
                     DWORD dwDataSize; // 数据的大小
         };
*/
